package org.apache.guacamole.redis;

import java.nio.charset.Charset;
import java.util.List;
import java.util.Set;

public interface RedisDao {

  byte[] get(String key);

  String getStr(String key);

  String getStr(String key, Charset charset);


  String set(String key, byte[] value);

  String set(String key, byte[] value, long expiredTime);

  String setAndExpire(String key, byte[] value, long seconds);

  String setAndExpireAt(String key, byte[] value, long unixTime);

  //list
  int addToList(String key, String value);

  String getFromList(String key);

  int getListCount(String key);

  List<String> getAllAndEmptyList(String key);


  boolean exists(String key);

  int remove(String key);

  /**
   * 获取集合key中得所有成员
   *
   * @param key
   * @return
   */
  Set<String> smembers(String key);

  /**
   * 取得集合key中得成员数量
   *
   * @param key
   * @return
   */
  long scard(String key);

  /**
   * 向集合key中增加元素
   *
   * @param key
   * @param elements
   * @return
   */
  long sadd(String key, List<String> elements);

  long sadd(String key, String value);

  /**
   * 取集合key1和key2的差集
   *
   * @param key1
   * @param key2
   * @return
   */
  Set<String> sdiff(String key1, String key2);

  /**
   * 频率限制：几秒内，能调用几次api
   * @param key
   * @param expiredSeconds
   * @param maxCalls
   * @return
   */
  int incrApiCallCount(String key, long expiredSeconds, int maxCalls);
}
